package com.liangxy.news.util;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.liangxy.news.database.AppDatabase;
import com.liangxy.news.model.User;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

/**
 * 数据库测试工具类
 */
public class DatabaseTestUtil {
    private static final String TAG = "DatabaseTestUtil";
    private static final Executor executor = Executors.newSingleThreadExecutor();
    
    /**
     * 初始化数据库并插入测试数据
     * @param context 上下文
     */
    public static void initializeDatabase(Context context) {
        executor.execute(() -> {
            try {
                // 获取数据库实例
                AppDatabase db = AppDatabase.getInstance(context);
                
                // 插入测试用户
                User testUser = new User();
                testUser.setId("test_user_id");
                testUser.setPhone("13800138000");
                testUser.setPassword("password123");
                testUser.setUsername("测试用户");
                testUser.setAvatar("");
                testUser.setLastLoginTime(System.currentTimeMillis());
                
                // 插入用户
                db.userDao().insert(testUser);
                
                Log.d(TAG, "测试数据插入成功");
                
                // 检查数据库文件是否存在
                checkDatabaseFile(context);
                
                // 检查表结构
                checkDatabaseTables(context);
            } catch (Exception e) {
                Log.e(TAG, "初始化数据库出错: " + e.getMessage(), e);
            }
        });
    }
    
    /**
     * 检查数据库文件是否存在
     * @param context 上下文
     */
    private static void checkDatabaseFile(Context context) {
        File dbFile = context.getDatabasePath("news_database");
        if (dbFile.exists()) {
            Log.d(TAG, "数据库文件存在: " + dbFile.getAbsolutePath() + ", 大小: " + dbFile.length() + " 字节");
        } else {
            Log.e(TAG, "数据库文件不存在!");
        }
    }
    
    /**
     * 检查数据库表结构
     * @param context 上下文
     */
    private static void checkDatabaseTables(Context context) {
        try {
            // 直接使用SQLite API打开数据库
            SQLiteDatabase db = SQLiteDatabase.openDatabase(
                    context.getDatabasePath("news_database").getAbsolutePath(),
                    null,
                    SQLiteDatabase.OPEN_READONLY
            );
            
            // 查询所有表名
            Cursor cursor = db.rawQuery(
                    "SELECT name FROM sqlite_master WHERE type='table'",
                    null
            );
            
            List<String> tableNames = new ArrayList<>();
            if (cursor.moveToFirst()) {
                do {
                    String tableName = cursor.getString(0);
                    tableNames.add(tableName);
                } while (cursor.moveToNext());
            }
            
            cursor.close();
            db.close();
            
            Log.d(TAG, "数据库中的表: " + tableNames);
        } catch (Exception e) {
            Log.e(TAG, "检查数据库表结构出错: " + e.getMessage(), e);
        }
    }
} 